package com.example.demo.zaqizabatest.sortalgorithm;

/**
 *
 * 从数组中选择最小元素，将它与数组的第一个元素交换位置。再从数组剩下的元素中选择出最小的元素，
 * 将它与数组的第二个元素交换位置。不断进行这样的操作，直到将整个数组排序。
 *
 * 选择排序需要 ~N2/2 次比较和 ~N 次交换，它的运行时间与输入无关，
 * 这个特点使得它对一个已经排序的数组也需要这么多的比较和交换操作。
 *
 * @ClassName SelectionSort 选择排序
 * @Author lys4134
 * @Date 2021/12/29 09:46:21
 * @Description SelectionSort
 * @Version 1.0
 **/
public class SelectionBaseSort<T extends Comparable<T>> extends BaseSort<T> {

    @SuppressWarnings("AlibabaLowerCamelCaseVariableNaming")
    @Override
    public void sort(T[] nums) {
        final int N = nums.length;
//        for (int i = 0; i < N - 1; i++) {
//            int min = i;
//            for (int j = i + 1; j < N; j++) {
//                if (less(nums[j], nums[min])) {
//                    min = j;
//                }
//            }
//            swap(nums, i, min);
//        }



        for (int i = 0; i < N - 1; i++) {
//            int min = i;
            for (int j = i + 1; j < N; j++) {
                if (nums[j].compareTo(nums[i]) < 0 ) {
                    T temp = nums[i];
                    nums[i] = nums[j];
                    nums[j] = temp;
                }
            }
//            swap(nums, i, min);
        }
    }

    public static void main(String[] args) {
        SelectionBaseSort<Integer> selectionSort = new SelectionBaseSort();
        Integer[] nums = new Integer[5];
        nums[0] = 3;nums[1] = 5;nums[2] = 2;nums[3] = 4;nums[4] = 1;
        selectionSort.sort(nums);
        selectionSort.print(nums);
    }
}